package Risk.IHM;

//~--- non-JDK imports --------------------------------------------------------

import Risk.Moteur.Pays;

//~--- JDK imports ------------------------------------------------------------

import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSlider;

/**
 * Creation d'une JDialog utilise pour les manoeuvres
 * @author Alexandre Liguori  & Nicoleta Sergi
 */
public class JDialogManoeuvre extends JDialog implements ActionListener {
    private static JDialogManoeuvre instance         = null;
    private static final long       serialVersionUID = 1L;
    private Pays                    arrive;
    private Pays                    depart;
    private JButton                 jbAnnul;
    private JButton                 jbDeplacer;
    private JButton                 jbToutDeplacer;
    private JLabel                  jl;
    private JPanel                  jpBout;
    private JSlider                 jsManoeuvre;
    private int                     max;
    private int                     min;
    private PlateauIhm              pihm;

    /**
     * creation du JDialog pour la manouevre
     * @param ihm - le plateau du jeu
     */
    private JDialogManoeuvre(PlateauIhm ihm) {
        super(ihm, "Deplacement des troupes");
        this.pihm = ihm;
        depart    = null;
        arrive    = null;
        this.setLayout(new GridLayout(3, 1));
        jl = new JLabel();

        // le slider pour faire les deplacements 
        jsManoeuvre = new JSlider();
        jsManoeuvre.setValue(1);
        jsManoeuvre.setMajorTickSpacing(1);
        jsManoeuvre.setMinorTickSpacing(1);
        jsManoeuvre.setPaintTicks(true);
        jsManoeuvre.setPaintLabels(true);
        jpBout     = new JPanel(new GridLayout(1, 3));
        jbDeplacer = new JButton(" Deplacer ");
        jbDeplacer.addActionListener(this);
        jbToutDeplacer = new JButton(" Tout deplacer ");
        jbToutDeplacer.addActionListener(this);
        jbAnnul = new JButton(" Annuler ");
        jbAnnul.addActionListener(this);
        jpBout.add(jbDeplacer);
        jpBout.add(jbToutDeplacer);
        jpBout.add(jbAnnul);
        this.getContentPane().add(jl);
        this.getContentPane().add(jsManoeuvre);
        this.getContentPane().add(jpBout);
        this.setVisible(true);
        this.pack();
        
        // position de la fenetre au millieur de l'ecran
	Dimension	ecran = Toolkit.getDefaultToolkit().getScreenSize();       
        Dimension frameSize = this.getSize();
        this.setLocation((ecran.width - frameSize.width)/2,(ecran.height - frameSize.height)/2);
    }
    /**
     * gestion des evenements
     * @param e - l'evenement declancheur
     */
    public void actionPerformed(ActionEvent e) {
        Object o = (JButton) e.getSource();
        //si on choisit un valeur grace au slider 
        if (o.equals(jbDeplacer)) {
            pihm.getRisk().manoeuvreJoueurCourant(depart, arrive, jsManoeuvre.getValue());

            if (ConnexionServeurIHM.CONNECTE) {
                pihm.getJtaConsole().append(pihm.getRisk().getTc().envoieInformationsPays(depart) + "\n");
                pihm.getJtaConsole().append(pihm.getRisk().getTc().envoieInformationsPays(arrive) + "\n");
            }

            this.setVisible(false);
            pihm.modifierTexte("Deplacement de " + jsManoeuvre.getValue() + " soldats de " + depart + " vers "
                               + arrive);
            pihm.getImgCarte().effaceSelection();
            pihm.repaint();
            pihm.getRisk().phaseSuivante();
        }
        //si on decide de deplacer tous les soldats
        if (o.equals(jbToutDeplacer)) {
            if (pihm.getRisk().manoeuvreJoueurCourant(depart, arrive, max)) {
                pihm.modifierTexte("Deplacement de " + max + " soldats de " + depart + " vers " + arrive);

                if (ConnexionServeurIHM.CONNECTE) {
                    pihm.getJtaConsole().append(pihm.getRisk().getTc().envoieInformationsPays(depart) + "\n");
                    pihm.getJtaConsole().append(pihm.getRisk().getTc().envoieInformationsPays(arrive) + "\n");
                }
            }

            this.setVisible(false);
            pihm.getImgCarte().effaceSelection();
            pihm.repaint();
            pihm.getRisk().phaseSuivante();
        }
        //reaffiche le plateau
        if (o.equals(jbAnnul)) {
            this.setVisible(false);
            pihm.getImgCarte().effaceSelection();
            pihm.repaint();
        }
    }
    /**
     * Singleton sur l'instance de la classe
     * @param ihm - le plateau a laquelle la fenetre appartient
     * @param depart - pays de depart
     * @param arrive - pays d'arrivee
     * @return - l'instance de la classe
     */
    public static JDialogManoeuvre getInstance(PlateauIhm ihm, Pays depart, Pays arrive) {
        if (instance == null) {
            instance = new JDialogManoeuvre(ihm);
        }

        instance.setVisible(true);
        instance.setDepart(depart);
        instance.setArrive(arrive);

        return instance;
    }
    /**
     * setter sur le pays d'arrivee
     * @param arrive - le nouvel pays d'arrivee
     */
    public void setArrive(Pays arrive) {
        this.arrive = arrive;
        jl.setText((" Deplacez des armees du " + depart + " vers " + arrive).toUpperCase());
    }
    /**
     * setter sur le pays de depart
     * @param depart - le nouvel pays de depart
     */
    public void setDepart(Pays depart) {
        this.depart = depart;
        max         = depart.getNbArmee() - 1;
        min         = 1;
        jsManoeuvre.setMinimum(min);
        jsManoeuvre.setMaximum(max);
    }
}
